package com.brainstrongtech.bfs.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.brainstrongtech.bfs.domian.Menu;

/**
 * 
 * @Description:
 * @author: tianhua.xie
 * @Date: 2017年4月3日 下午9:39:52
 *
 */
public interface MenuDao {

	/**
	 * 新增菜单信息
	 * 
	 * @param menu
	 * @return
	 */
	int insert(Menu menu);

	/**
	 * 根据id查找对应的菜单信息
	 * 
	 * @param menuId
	 * @return
	 */
	Menu selectById(Long menuId);

	/**
	 * 根据id删除对应的菜单信息
	 * 
	 * @param menuId
	 * @return
	 */
	int deleteById(Long menuId);

	/**
	 * 更新菜单信息
	 * 
	 * @param menu
	 * @return
	 */
	int update(Menu menu);

	/**
	 * 查找所有的的菜单信息
	 * 
	 * @return
	 */
	List<Menu> loadAllMenus();

	/**
	 * 获取所有的子菜单的ID，若parentId为0，则是获取顶级菜单的所有ID
	 * 
	 * @param parentId
	 * @return
	 */
	List<Long> selectSunMenuIds(@Param(value = "parentId") Long parentId);

	/**
	 * 获取所有的子菜单的信息，若parentId为0，则是获取顶级菜单的所有ID
	 * 
	 * @param parentId
	 * @return
	 */
	List<Menu> selectSunMenus(@Param(value = "parentId") Long parentId);

	/**
	 * 查找出目标ID列表中所有正在使用的ID
	 * 
	 * @param menuIdList
	 * @return
	 */
	List<Long> selectUsingMenusId(List<Long> menuIdList);

	/**
	 * 删除所有ID指定的菜单
	 * 
	 * @param menuIdList
	 * @return
	 */
	void deleteMenusByIds(List<Long> menuIdList);

	/**
	 * 根据userId、parentId查询该用户的菜单信息，若parentId不为空，则是parentId菜单下的子菜单
	 * 
	 * @param userId
	 * @param parentId
	 *            可选，可空
	 * @return
	 */
	List<Menu> loadUserMenuTreeDataById(@Param("userId") Integer userId, @Param("parentId") String parentId);

}
